package com.founder.devwork.config;

import com.founder.devwork.persistence.gateway.gitlab.GitGateway;
import com.founder.devwork.persistence.gateway.gitlab.GitGatewayImpl;
import com.founder.devwork.persistence.gateway.gitlab.datasource.BeijingGitDataSource;
import com.founder.devwork.persistence.gateway.gitlab.datasource.ChengduGitDataSource;
import com.founder.devwork.persistence.gateway.gitlab.datasource.GitDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;

/**
 * GitConfig 用于配置 Git 数据源及其对应的 Gateway Bean。
 * 支持北京和成都两地的 Git 数据源，并为每个数据源分别提供 Gateway 实例。
 */
@Configuration
public class GitConfig {

    /**
     * 北京 Git 数据源 Bean，作为主数据源（@Primary）。
     * @return 北京数据源实例
     */
    @Bean("beijingDataSource")
    @Primary
    public GitDataSource beijingGitDataSource() {
        return new BeijingGitDataSource();
    }

    /**
     * 成都 Git 数据源 Bean。
     * @return 成都数据源实例
     */
    @Bean("chengduDataSource")
    public GitDataSource chengduGitDataSource() {
        return new ChengduGitDataSource();
    }

    /**
     * 默认 GitGateway Bean，注入北京数据源。
     * @param dataSource 北京数据源
     * @return GitGateway 实现
     */
    @Bean
    public GitGateway gitGateway(@Qualifier("beijingDataSource") GitDataSource dataSource) {
        return new GitGatewayImpl(dataSource);
    }

    /**
     * 北京专用 GitGateway Bean，单例模式。
     * @param dataSource 北京数据源
     * @return GitGateway 实现
     */
    @Bean("beijingGitGateway")
    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
    public GitGateway beijingGitGateway(@Qualifier("beijingDataSource") GitDataSource dataSource) {
        return new GitGatewayImpl(dataSource);
    }

    /**
     * 成都专用 GitGateway Bean，单例模式。
     * @param dataSource 成都数据源
     * @return GitGateway 实现
     */
    @Bean("chengduGitGateway")
    @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
    public GitGateway chengduGitGateway(@Qualifier("chengduDataSource") GitDataSource dataSource) {
        return new GitGatewayImpl(dataSource);
    }
}
